home *** CD-ROM | disk | FTP | other *** search
/ L' Effet Pommier 3 / L'Effet Pommier - Volume 03.iso / Programmation / Gooey1.3.1 / C Templates / mmAppleEvents.c < prev    next >
Text File  |  1995-01-29  |  6KB  |  173 lines

  1. $$Message MM AEs, mm:mmAEs$Prototype.name$.c
  2. $$File mm:mmAEs$Prototype.name$.c
  3. /*  mmAEs$Prototype.name$                         AppleEvents */
  4. /*  $CopyRight$ */
  5.  
  6. /*
  7.     Name:  mmAEs$Prototype.name$.c
  8.     Function:  AppleEvents for the Marksman¬ specific code.
  9.     History: $Date$ Original by $Author$
  10. */
  11.  
  12.  
  13. #include "mmCommon$Prototype.name$.h"            /* Common */
  14. #include "Common$Prototype.name$.h"                /* Common */
  15.  
  16. static OSErr OpenDocEventHandler(AppleEvent *message,AppleEvent *reply);
  17.  
  18. static OSErr PrintDocEventHandler(AppleEvent *message,AppleEvent *reply);
  19.  
  20. /* ======================================================= */
  21. /* ======================================================= */
  22.  
  23. /* Routine: MissedAnyParameters */
  24. /* Purpose: Used to check for any unread required parameters. */
  25. /* Returns true if we missed at least one */
  26.  
  27. Boolean MissedAnyParameters(AppleEvent *message)
  28. {
  29. OSErr        err;                                /* Error */
  30. DescType    ignoredActualType;                    /* Descriptor */
  31. AEKeyword    missedKeyword;                        /* Key word */
  32. Size        ignoredActualSize;                    /* Size */
  33. EventRecord    event;                                /* Event */
  34.  
  35.  
  36. err = AEGetAttributePtr(message,keyMissedKeywordAttr,typeKeyword,&ignoredActualType,(Ptr)&missedKeyword,sizeof(AEKeyword),&ignoredActualSize);/*  */
  37.  
  38. /* No error means that we found some unused parameters. */
  39. if (err == noErr)                                    /* See if any errors. */
  40.     {
  41.     event.message = *(long *)&ignoredActualType;
  42.     event.where = *(Point *)&missedKeyword;
  43.     err = errAEEventNotHandled;
  44.     }
  45. return(err != errAEDescNotFound);                    /* Return possible error */
  46. }
  47.  
  48. /* ======================================================= */
  49.  
  50. /* Routine: OpenDocEventHandler */
  51. /* Purpose: Called when we recieve an AppleEvent with an ID of 'kAEOpenDocuments'. */
  52. /* This routine gets the direct parameter, parses it up into little FSSpecs, and opens each indicated file */
  53.  
  54. static OSErr OpenDocEventHandler(AppleEvent *message, AppleEvent *reply)
  55. {
  56. OSErr        err;                                    /* Error */
  57. AEDesc        theDesc;                                /* Descriptor */
  58. FSSpec        theFSSpec;                                /* File Spec */
  59. short        ItemNumber;                                /* Index */
  60. long        numFilesToOpen;                            /* Number of files */
  61. AEKeyword    ignoredKeyWord;                            /* Key word */
  62. DescType    ignoredType;                            /* Descriptor type */
  63. Size        ignoredSize;                            /* Size */
  64.  
  65.  
  66. err = noErr;                                        /* No errors yet */
  67. theDesc.dataHandle = nil;                            /* No data yet */
  68.  
  69. err = AEGetParamDesc(message,keyDirectObject,typeAEList,&theDesc);/* Get it */
  70. if (err == noErr)                                    /* See if any errors */
  71.     {
  72.     if (!MissedAnyParameters(message))                /* See if missing parameters */
  73.         {
  74.         err = AECountItems(&theDesc,&numFilesToOpen);/* Get number of files to do */
  75.         if (err == noErr)                            /* See if any errors */
  76.             {
  77.             for (ItemNumber=1; ItemNumber <= numFilesToOpen; ++ItemNumber)/*  */
  78.                 {
  79.                 err = AEGetNthPtr(&theDesc,ItemNumber,typeFSS,&ignoredKeyWord,&ignoredType,(Ptr)&theFSSpec,sizeof(FSSpec),&ignoredSize);/* Get it */
  80.                 if (err == noErr)                    /* See if any errors */
  81.                     {
  82.                     AE_OpenThisFile(&theFSSpec,ItemNumber,numFilesToOpen);/* Call the user open routine */
  83.                     }
  84.                 }
  85.             }
  86.         }
  87.     }
  88. return(err);                                        /* Return possible error */
  89. }
  90.  
  91. /* ======================================================= */
  92.  
  93. /* Routine: PrintDocEventHandler */
  94. /* Purpose: Called when we recieve an AppleEvent with an ID of 'kAEPrintDocuments'. */
  95. /* This routine gets the direct parameter, parses it up into little FSSpecs, and prints each indicated file */
  96.  
  97. static OSErr PrintDocEventHandler(AppleEvent *message, AppleEvent *reply)
  98. {
  99. OSErr        err;                                    /* Error */
  100. AEDesc        theDesc;                                /* Descriptor */
  101. FSSpec        theFSSpec;                                /* File Spec */
  102. short        ItemNumber;                                /* Index */
  103. long        numFilesToOpen;                            /* Number of files */
  104. AEKeyword    ignoredKeyWord;                            /* Key word */
  105. DescType    ignoredType;                            /* Descriptor type */
  106. Size        ignoredSize;                            /* Size */
  107.  
  108. err = noErr;                                        /* No errors yet */
  109. theDesc.dataHandle = nil;                            /* No data yet */
  110.  
  111. err = AEGetParamDesc(message,keyDirectObject,typeAEList,&theDesc);/* Get it */
  112. if (err == noErr)                                    /* See if any errors */
  113.     {
  114.     if (!MissedAnyParameters(message))                /* See if missing parameters */
  115.         {
  116.         err = AECountItems(&theDesc,&numFilesToOpen);/* Get number of files to do */
  117.         if (err == noErr)                            /* See if any errors */
  118.             {
  119.             for (ItemNumber=1; ItemNumber <= numFilesToOpen; ++ItemNumber)/*  */
  120.                 {
  121.                 err = AEGetNthPtr(&theDesc,ItemNumber,typeFSS,&ignoredKeyWord,&ignoredType,(Ptr)&theFSSpec,sizeof(FSSpec),&ignoredSize);/* Get it */
  122.                 if (err == noErr)                    /* See if any errors */
  123.                     {
  124.                     AE_PrintThisFile(&theFSSpec,ItemNumber,numFilesToOpen);/* Call the user print routine */
  125.                     }
  126.                 }
  127.             }
  128.         }
  129.     }
  130. return(err);                                        /* Return possible error */
  131. }
  132.  
  133. /* ======================================================= */
  134.  
  135. /* Routine: DispatchAppleEvent */
  136. /* Purpose: Figure out where to dispatch this event to. */
  137. /* See which way we should go */
  138.  
  139. pascal OSErr DispatchAppleEvent(AppleEvent *message,AppleEvent *reply, long refcon)
  140. {
  141. OSErr    err;                                        /* Error */
  142.  
  143. err = errAEEventNotHandled;                            /* Setup for an error */
  144.  
  145. switch (refcon)                                        /* See which one */
  146.     {
  147.     case kAEOpenApplication:                        /* Open application */
  148.         err = AE_OpenedApplication(message,reply,refcon);
  149.         break;
  150.     case kAEOpenDocuments:                            /* Open documents */
  151.         err = OpenDocEventHandler(message,reply);
  152.         break;
  153.     case kAEPrintDocuments:                            /* Print documents */
  154.         err = PrintDocEventHandler(message,reply);
  155.         break;
  156.     case kAEQuitApplication:                        /* Close application */
  157.         err = AE_QuittingApplication(message,reply,refcon);
  158.         break;
  159.     default:                                        /* allow other buttons, trap for debug */
  160.         err = errAEEventNotHandled;                    /* Nobody is home for that event */
  161.         break;                                        /* end of otherwise */
  162.     }                                                /* end of switch */
  163.  
  164. if (err != noErr)                                    /* See if any errors */
  165.     err = AEPutParamPtr(reply,keyErrorNumber,typeShortInteger,(Ptr)&err,sizeof(short));/* Send back the error message */
  166.  
  167. return(err);                                        /* Return possible error */
  168. }
  169.  
  170. /* ======================================================= */
  171. /* ======================================================= */
  172. $$CloseFile
  173.